<?php

/*
	[UCenter] (C)2001-2099 Comsenz Inc.
	This is NOT a freeware, use is subject to license terms

	$Id: user.php 1082 2011-04-07 06:42:14Z svn_project_zhangjie $
*/

!defined('IN_UC') && exit('Access Denied');

define('UC_USER_CHECK_USERNAME_FAILED', -1);
define('UC_USER_USERNAME_BADWORD', -2);
define('UC_USER_USERNAME_EXISTS', -3);
define('UC_USER_EMAIL_FORMAT_ILLEGAL', -4);
define('UC_USER_EMAIL_ACCESS_ILLEGAL', -5);
define('UC_USER_EMAIL_EXISTS', -6);
define('UC_USER_PHONE_EXISTS', -7);
define('UC_USER_NICKNAME_EXISTS', -8);

class usercontrol extends base {


	function __construct() {
		$this->usercontrol();
	}

	function usercontrol() {
		parent::__construct();
		$this->load('user');
		$this->app = $this->cache['apps'][UC_APPID];
	}

	// -1 δ����
	function onsynlogin() {
		$this->init_input();
		$uid = $this->input('uid');
		if($this->app['synlogin']) {
			if($this->user = $_ENV['user']->get_user_by_uid($uid)) {
				$synstr = '';
				foreach($this->cache['apps'] as $appid => $app) {
					if($app['synlogin'] && $app['appid'] != $this->app['appid']) {
						$synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&password='.$this->user['password']."&time=".$this->time, 'ENCODE', $app['authkey'])).'"></script>';
					}
				}
				return $synstr;
			}
		}
		return '';
	}

	function onsynlogout() {
		$this->init_input();
		if($this->app['synlogin']) {
			$synstr = '';
			foreach($this->cache['apps'] as $appid => $app) {
				if($app['synlogin'] && $app['appid'] != $this->app['appid']) {
					$synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogout&time='.$this->time, 'ENCODE', $app['authkey'])).'"></script>';
				}
			}
			return $synstr;
		}
		return '';
	}

	function onregister() {
		$this->init_input();
		$username = $this->input('username');
		// f_d($username);
		$password =  $this->input('password');
		$email = $this->input('email');
		$questionid = $this->input('questionid');
		$answer = $this->input('answer');
		$regip = $this->input('regip');
		$source = $this->input('source');
        $regdate= $this->input('regdate');
		$ipInfo= $this->input('ipInfo');
		$nickname = $this->input('nickname');
		$phone = $this->input('phone');
		$url = $this->input('url');

		if(($status = $this->_check_username($username)) < 0) {
			return $status;
		}
		if($email != ''){
			if(($status = $this->_check_email($email)) < 0) {
				return $status;
			}
		}
		if($nickname != ''){
            if(($status = $this->_check_nickname($nickname)) < 0) {
                return $status;
            }
        }
        if($phone != ''){
            if(($status = $this->_check_phone($phone)) < 0) {
                return $status;
            }
        }
		// $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip,$url);
		$uid = $_ENV['user']->add_user($username, $password, $email, $phone,$source,$regdate, 0, $questionid, $answer, $regip,$ipInfo,'',$url);
		if($uid>0){
            $username = 'sy'.$uid;
			$this->db->query("UPDATE ".UC_DBTABLEPRE."members SET username = '{$username}' WHERE uid='$uid'");
			$this->db->query("UPDATE ".UC_DBTABLEPRE."members SET nickname = '{$nickname}' WHERE uid='$uid'");
        }
		return $uid;
	}

	function onedit() {
		$this->init_input();
		$username = $this->input('username');
		$oldpw = $this->input('oldpw');
		$newpw = $this->input('newpw');
		$email = $this->input('email');
		$ignoreoldpw = $this->input('ignoreoldpw');
		$questionid = $this->input('questionid');
		$answer = $this->input('answer');

		if(!$ignoreoldpw && $email && ($status = $this->_check_email($email, $username)) < 0) {
			return $status;
		}
		$status = $_ENV['user']->edit_user($username, $oldpw, $newpw, $email, $ignoreoldpw, $questionid, $answer);

		if($newpw && $status > 0) {
			$this->load('note');
			$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
			$_ENV['note']->send();
		}
		return $status;
	}

	function onlogin() {
		$this->init_input();
		$isuid = $this->input('isuid');
		$username = $this->input('username');
		$password = $this->input('password');
		$checkques = $this->input('checkques');
		$questionid = $this->input('questionid');
		$answer = $this->input('answer');
		if($isuid == 1) {
			$user = $_ENV['user']->get_user_by_uid($username);
		} elseif($isuid == 2) {
			$user = $_ENV['user']->get_user_by_email($username);
		} else {
			$user = $_ENV['user']->get_user_by_username($username);
		}

		$passwordmd5 = preg_match('/^\w{32}$/', $password) ? $password : md5($password);
		if(empty($user)) {
			$status = -1;
		} elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
			$status = -2;
		} elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
			$status = -3;
		} else {
			$status = $user['uid'];
		}
		$merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0;
		return array($status, $user['username'], $password, $user['email'], $merge);
	}

	function oncheck_email() {
		$this->init_input();
		$email = $this->input('email');
		return $this->_check_email($email);
	}

	function oncheck_username() {
		$this->init_input();
		$username = $this->input('username');
		if(($status = $this->_check_username($username)) < 0) {
			return $status;
		} else {
			return 1;
		}
	}

	//验证昵称
    function oncheck_nickname() {
        $this->init_input();
        $nickname = $this->input('nickname');
        return $this->_check_nickname($nickname);
    }

	//修改昵称
    function onedit_nickname() {
        $this->init_input();
        $nickname = $this->input('nickname');
        $uid = $this->input('uid');
        return $_ENV['user']->edit_nickname($nickname,$uid);
    }

    /**
	 * 修改积分
	 * by yanni
	 */
	function onintegral_edit1(){
		$this->init_input();
		$uid = $this->input('uid');
		$behavior = $this->input('behavior');
		$integral = $this->input('integral');
		$type = $this->input('type');
		$time = time();
		$data = $this->db->fetch_first("SELECT username,totalIntegral,integral,uid FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
		if($type == 1){
			$total_integral = $data['integral'] + ($integral);
			$total_integral_z = $data['totalIntegral'] + ($integral);
//            file_get_contents("http://gossip.gmatonline.cn/cn/api/edit-role?uid=$uid&integral=$total_integral_z");
		}else{
			$total_integral = $data['integral'] - ($integral);
            $total_integral_z = $data['totalIntegral'];
		}
		$this->db->query("UPDATE ".UC_DBTABLEPRE."members SET integral = $total_integral,totalIntegral = $total_integral_z WHERE uid='$uid'");

		$this->db->query("INSERT INTO ".UC_DBTABLEPRE."integral SET username='{$data['username']}', uid={$data['uid']}, createTime=$time, type=$type,behavior='$behavior', integral=$integral");
		return 1;
	}

	function onget_user() {
		$this->init_input();
		$username = $this->input('username');
		if(!$this->input('isuid')) {
			$status = $_ENV['user']->get_user_by_username($username);
		} else {
			$status = $_ENV['user']->get_user_by_uid($username);
		}
		if($status) {
			return array($status['uid'],$status['username'],$status['email']);
		} else {
			return 0;
		}
	}
	function onget_user_info() {
		$this->init_input();
		$username = $this->input('uid');
		$status = $_ENV['user']->get_user_by_uid($username);
		if($status) {
			return $status;
		} else {
			return 0;
		}
	}


	function ongetprotected() {
		$protectedmembers = $this->db->fetch_all("SELECT uid,username FROM ".UC_DBTABLEPRE."protectedmembers GROUP BY username");
		return $protectedmembers;
	}

	function ondelete() {
		$this->init_input();
		$uid = $this->input('uid');
		return $_ENV['user']->delete_user($uid);
	}

	function onaddprotected() {
		$this->init_input();
		$username = $this->input('username');
		$admin = $this->input('admin');
		$appid = $this->app['appid'];
		$usernames = (array)$username;
		foreach($usernames as $username) {
			$user = $_ENV['user']->get_user_by_username($username);
			$uid = $user['uid'];
			$this->db->query("REPLACE INTO ".UC_DBTABLEPRE."protectedmembers SET uid='$uid', username='$username', appid='$appid', dateline='{$this->time}', admin='$admin'", 'SILENT');
		}
		return $this->db->errno() ? -1 : 1;
	}

	function ondeleteprotected() {
		$this->init_input();
		$username = $this->input('username');
		$appid = $this->app['appid'];
		$usernames = (array)$username;
		foreach($usernames as $username) {
			$this->db->query("DELETE FROM ".UC_DBTABLEPRE."protectedmembers WHERE username='$username' AND appid='$appid'");
		}
		return $this->db->errno() ? -1 : 1;
	}

	function onmerge() {
		$this->init_input();
		$oldusername = $this->input('oldusername');
		$newusername = $this->input('newusername');
		$uid = $this->input('uid');
		$password = $this->input('password');
		$email = $this->input('email');
		if(($status = $this->_check_username($newusername)) < 0) {
			return $status;
		}
		$uid = $_ENV['user']->add_user($newusername, $password, $email, $uid);
		$this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$oldusername'");
		return $uid;
	}

	function onmerge_remove() {
		$this->init_input();
		$username = $this->input('username');
		$this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$username'");
		return NULL;
	}

	function _check_username($username) {
		$username = addslashes(trim(stripslashes($username)));
		if(!$_ENV['user']->check_username($username)) {
			return UC_USER_CHECK_USERNAME_FAILED;
		} elseif(!$_ENV['user']->check_usernamecensor($username)) {
			return UC_USER_USERNAME_BADWORD;
		} elseif($_ENV['user']->check_usernameexists($username)) {
			return UC_USER_USERNAME_EXISTS;
		}
		return 1;
	}

	function _check_email($email, $username = '') {
		if(empty($this->settings)) {
			$this->settings = $this->cache('settings');
		}
		if(!$_ENV['user']->check_emailformat($email)) {
			return UC_USER_EMAIL_FORMAT_ILLEGAL;
		} elseif(!$_ENV['user']->check_emailaccess($email)) {
			return UC_USER_EMAIL_ACCESS_ILLEGAL;
		} elseif(!$this->settings['doublee'] && $_ENV['user']->check_emailexists($email, $username)) {
			return UC_USER_EMAIL_EXISTS;
		} else {
			return 1;
		}
	}

	function _check_nickname($nickname) {
        $nickname = addslashes(trim(stripslashes($nickname)));
        if($_ENV['user']->check_nicknameexists($nickname)) {
            return UC_USER_NICKNAME_EXISTS;
        }
        return 1;
    }

    function _check_phone($phone) {
        $phone = addslashes(trim(stripslashes($phone)));
        if($_ENV['user']->check_phoneexists($phone)) {
            return UC_USER_PHONE_EXISTS;
        }
        return 1;
    }

	function onuploadavatar() {
	}

	function onrectavatar() {
	}
	function flashdata_decode($s) {
	}

	/**
     * [onintegral_edit3 description]
     * @Author don
     * @Date   2021-09-27
     * @return [type]     [description]
     */
    function onintegral_edit3(){
        $this->init_input();
        $uid = $this->input('uid');
        $behavior = $this->input('behavior');
        $integral = $this->input('integral');
        $type = $this->input('type');
        $source = $this->input('source');
        $time = time();
        $data = $this->db->fetch_first("SELECT username,totalIntegral,integral,uid FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
        if($type == 1){
            $total_integral = $data['integral'] + ($integral);
            $total_integral_z = $data['totalIntegral'] + ($integral);
        }else{
            $total_integral = $data['integral'] - ($integral);
            $total_integral_z = $data['totalIntegral'];
        }
        $this->db->query("UPDATE ".UC_DBTABLEPRE."members SET integral = $total_integral,totalIntegral = $total_integral_z WHERE uid='$uid'");

        $this->db->query("INSERT INTO ".UC_DBTABLEPRE."integral SET username='{$data['username']}', uid={$data['uid']}, createTime=$time, type=$type,behavior='$behavior', integral=$integral, source='$source'");
        return 1;
    }
    
	/**
	 * 获取积分
	 * by yanni
	 */
	function onget_integral1(){
		$this->init_input();
		$uid = $this->input('uid');
		$limit = $this->input('limit');
		$where = $this->input('where');
		$integral = $this->db->result_first("SELECT integral,uid FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
        $totalIntegral = $this->db->result_first("SELECT totalIntegral,uid FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
		$details = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."integral WHERE uid='$uid' $where ORDER BY createTime DESC $limit");
		$count = $this->db->fetch_all("SELECT id FROM ".UC_DBTABLEPRE."integral WHERE uid='$uid' $where ORDER BY createTime DESC");
		if(!$details){
			$details = [];
		}
		$data = [
				'integral' => $integral,
				'totalIntegral' => $totalIntegral,
				'details' => $details,
				'count' => count($count),
		];
		return $data;
	}
}

?>